package com.speciality.demo.demos.web;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.speciality.demo.demos.entity.WeatherHourly;
import com.speciality.demo.demos.result.Result;
import com.speciality.demo.demos.service.WeatherHourlyService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;

@RestController
@RequestMapping("/api/weather-hourly")
public class WeatherHourlyController {
    @Autowired
    private WeatherHourlyService weatherHourlyService; // MyBatis-Plus 的 IService

    // 新增数据：直接接收 WeatherHourly
    @PostMapping
    public Result add(@RequestBody WeatherHourly entity) {
        // 补充 BaseEntity 字段（假设 BaseEntity 含 createTime）
        entity.setCreatedAt(LocalDateTime.now());
        weatherHourlyService.save(entity); // MyBatis-Plus 自动插入
        return Result.ok("新增成功");
    }

    // 编辑数据：直接接收 WeatherHourly（必须含 id）
    @PutMapping
    public Result update(@RequestBody WeatherHourly entity) {
        if (entity.getId() == null) {
            return Result.fail("更新失败：id 不能为空");
        }
        weatherHourlyService.updateById(entity); // MyBatis-Plus 自动更新
        return Result.ok("更新成功");
    }

    // 编辑回显：查询单条数据
    @GetMapping("/{id}")
    public Result<WeatherHourly> getById(@PathVariable Long id) {
        WeatherHourly entity = weatherHourlyService.getById(id);
        if (entity == null) {
            return Result.fail(entity);
        }
        return Result.ok(entity);
    }
    /**
     * 分页查询（支持时间筛选）
     * @param pageNum  当前页码（默认1）
     * @param pageSize 每页条数（默认10）
     * @param startDate 开始日期（如：2025-10-01）
     * @param endDate   结束日期（如：2025-10-02）
     */
    @GetMapping("/page")
    public Result<IPage<WeatherHourly>> getPage(
            @RequestParam(defaultValue = "1") Integer pageNum,
            @RequestParam(defaultValue = "10") Integer pageSize,
            @RequestParam(required = false) String startDate,
            @RequestParam(required = false) String endDate
    ) {
        // 1. 构建分页对象
        Page<WeatherHourly> page = new Page<>(pageNum, pageSize);

        // 2. 构建时间筛选条件（拼接时间范围：00:00:00 ~ 23:59:59）
        QueryWrapper<WeatherHourly> queryWrapper = new QueryWrapper<>();
        if (startDate != null) {
            queryWrapper.ge("time", startDate + " 00:00:00"); // 大于等于开始日期0点
        }
        if (endDate != null) {
            queryWrapper.le("time", endDate + " 23:59:59");   // 小于等于结束日期23点59分
        }
        queryWrapper.orderByDesc("time"); // 按时间倒序（最新数据在前）

        // 3. 执行分页查询
        IPage<WeatherHourly> result = weatherHourlyService.page(page, queryWrapper);

        // 4. 返回结果（包含 records、total、pages 等）
        return Result.ok(result);
    }
}
